package com.alm.handle.service;

import com.alm.common.core.domain.AjaxResult;
import com.alm.entity.PasingByteModel;
import com.alm.handle.core.domain.entity.rq.DevCronEditRq;
import com.alm.handle.core.domain.entity.rq.DevCronQueryRq;

/**
 * 设备定时任务管理接口
 *
 * @author 詹泽峰
 * @date 2024/07/04 09:21
 */
public interface AlmDevCronService {

    /**
     * 获取定时任务列表
     *
     * @param rq
     * @return com.alm.common.core.domain.AjaxResult
     * @author: 詹泽峰
     * @date: 2024/7/5 13:37
     */
    AjaxResult getDevCronList(DevCronQueryRq rq);

    /**
     * 根据任务id查询任务信息
     *
     * @author: 詹泽峰
     * @date: 2024/7/16 15:59
     * @param rq
     * @return com.alm.common.core.domain.AjaxResult
     */
    AjaxResult getDevCronById(DevCronQueryRq rq);

    /**
     * 新增定时任务
     *
     * @param rq
     * @return com.alm.common.core.domain.AjaxResult
     * @author: 詹泽峰
     * @date: 2024/7/10 15:20
     */
    AjaxResult addDevCron(DevCronEditRq rq);

    /**
     * 删除定时任务
     *
     * @param rq
     * @return com.alm.common.core.domain.AjaxResult
     * @author: 詹泽峰
     * @date: 2024/7/10 16:59
     */
    AjaxResult delDevCron(DevCronEditRq rq);

    /**
     * 修改定时任务
     *
     * @param rq
     * @return com.alm.common.core.domain.AjaxResult
     * @author: 詹泽峰
     * @date: 2024/7/10 18:16
     */
    AjaxResult editDevCron(DevCronEditRq rq);

    /**
     * 解析定时任务数据
     *
     * @param header
     * @return void
     * @author: 詹泽峰
     * @date: 2024/7/8 11:33
     */
    void updateRedisCronList(PasingByteModel.Header header) throws Exception;

    /**
     * 修改任务启用/禁用状态
     *
     * @param rq
     * @return com.alm.common.core.domain.AjaxResult
     * @author: 詹泽峰
     * @date: 2024/7/16 14:58
     */
    AjaxResult editCronSwitch(DevCronEditRq rq);

    /**
     * 前端轮询该服务进行表格刷新，实时刷新表格数据
     *
     * @param rq
     * @return com.alm.common.core.domain.AjaxResult
     * @author: 詹泽峰
     * @date: 2024/7/16 14:58
     */
    AjaxResult refresh(DevCronQueryRq rq);

    /**
     * 之前的设备离线，上线后若有设备分组任务则新增任务
     * @author: 詹泽峰
     * @date: 2024/8/27 11:39
     * @param mac
     */
    void addCronWhenLogin(String mac, Integer devType);

    /**
     * 将任务应用于设备对应设备分组
     *
     * @author: 詹泽峰
     * @date: 2024/8/27 16:20
     * @param rq
     * @return com.alm.common.core.domain.AjaxResult
     */
    AjaxResult setCronByDevGroup(DevCronEditRq rq);
}